/**
 * 上海中赢金融信息服务有限公司
 * Copyright (c) 2017-2027 Chinazyjr,Inc.All Rights Reserved.
 */
package com.sys.midware.rdb.support.page;

import java.util.Collections;
import java.util.List;

/**
 * 分页包装类 <b>ClassName：</b> Pager <br/>
 * <b>Description：</b> TODO <br/>
 * <b>@author：</b> mobing <br/>
 * <b>@date：</b> 2016年4月28日 上午10:00:04 <br/>
 * <b>@version: </b> @param <T> <br/>
 */
public class Pagenation<T> implements java.io.Serializable {
    private static final long serialVersionUID = 1L;

    /** 查询结果 */
    private List<T> datas;

    /** 每页记录数 */
    private int pageSize = getDefaultPageSize();

    /** 总页数 */
    private  int pageCount = 0;

    /** 当前页数 */
    private int currentPage = 1;

    /** 总记录数 */
    private int totalCount;

    public Pagenation() {
        super();
    }
    

    public int getCurrentPage() {
        if (currentPage > pageCount)
            currentPage = pageCount;
        if (currentPage < 1)
            currentPage = 1;
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    /**
     * 开始记录条数
     * 
     * @param
     * @return Integer
     */
    public Integer getStartRow() {
        return (getCurrentPage() - 1) * getPageSize();
    }

    /**
     * 结束记录条数
     * 
     * @param
     * @return Integer
     */
    public Integer getEndRow() {
        return getCurrentPage() * getPageSize();
    }

    public static int getDefaultPageSize() {
        return 20;
    }

    public void setDatas(List<T> datas) {
        this.datas = datas;
    }

    /**
     * 返回结果集 如果list空返回空的list
     */
    @SuppressWarnings("unchecked")
    public List<T> getDatas() {
        return datas == null ? Collections.EMPTY_LIST : datas;
    }

    public int getPageCount() {
        return (this.totalCount + this.pageSize - 1) / this.pageSize;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
        this.pageCount = getPageCount();
    }

    /**
     * 获取总数
     * 
     * @return
     */
    public int getTotalCount() {
        return totalCount;
    }

    /**
     * 设置每页记录数
     * 
     * @param pageSize
     *            页大小
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize < 1 ? getDefaultPageSize() : pageSize;
    }

    /**
     * 获取每页显示记录数
     * 
     * @return
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 第一条记录索引位置
     * 
     * @return
     */
    public int getFirstResult() {
        return (currentPage - 1) * pageSize;
    }

    /**
     * 是否需要查询. 根据已知的总记录数totalCount判断:如果总记录数超过getFirstResult()需要查询，不需要查询
     */
    public boolean needQuery() {
        return totalCount > getFirstResult();
    }

}
